From: kaf24@scramble.cl.cam.ac.uk Date: Sat, 24 Apr 2004 08:10:58 +0000 (+0000) Subject: bitkeeper revision 1.877 (408a2112twZvxfjh5flm0x6eryHUPw) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~18244 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks:///%22http:/www.example.com/cgi/%22https:/%22bookmarks:/?a=commitdiff_plain;h=05cf8d49b30fcf2465b17e19643f5388ecb96dea;p=xen.git bitkeeper revision 1.877 (408a2112twZvxfjh5flm0x6eryHUPw) Fix crash in e100 rx routines. Also add diagnostic tracing for tx failures. --- diff --git a/xen/drivers/net/e100/e100.h b/xen/drivers/net/e100/e100.h index 1c42fb5069..8503550d9c 100644 --- a/xen/drivers/net/e100/e100.h +++ b/xen/drivers/net/e100/e100.h @@ -484,7 +484,6 @@ typedef struct net_device_stats net_dev_stats_t; #define TCBS_AVAIL(X) (NEXT_TCB_TOUSE( NEXT_TCB_TOUSE((X).tail)) != (X).head) #define RFD_POINTER(skb,bdp) ((rfd_t *) (((unsigned char *)((skb)->data))-((bdp)->rfd_size))) -#define SKB_RFD_STATUS(skb,bdp) ((RFD_POINTER((skb),(bdp)))->rfd_header.cb_status) /* ====================================================================== */ /* 82557 */ @@ -977,6 +976,16 @@ extern unsigned char e100_configure_device(struct e100_private *bdp); extern unsigned char e100_cu_unknown_state(struct e100_private *bdp); #endif +static inline u16 SKB_RFD_STATUS(struct sk_buff *skb, struct e100_private *bdp) +{ + u16 status; + rfd_t *rfd = RFD_POINTER(skb, bdp); + rfd = map_domain_mem(__pa(rfd)); + status = rfd->rfd_header.cb_status; + unmap_domain_mem(rfd); + return status; +} + #define ROM_TEST_FAIL 0x01 #define REGISTER_TEST_FAIL 0x02 #define SELF_TEST_FAIL 0x04 diff --git a/xen/drivers/net/e100/e100_main.c b/xen/drivers/net/e100/e100_main.c index 300e0ad4d3..6ce4d87b8c 100644 --- a/xen/drivers/net/e100/e100_main.c +++ b/xen/drivers/net/e100/e100_main.c @@ -1092,6 +1092,7 @@ e100_xmit_frame(struct sk_buff *skb, struct net_device *dev) struct e100_private *bdp = dev->priv; if (!spin_trylock(&bdp->bd_non_tx_lock)) { + printk("Couldn't acqure lock in e100_xmit_frame\n"); notify_stop = true; rc = 1; goto exit2; @@ -1099,6 +1100,10 @@ e100_xmit_frame(struct sk_buff *skb, struct net_device *dev) if (!TCBS_AVAIL(bdp->tcb_pool) || (bdp->non_tx_command_state != E100_NON_TX_IDLE)) { + printk("Bailing from e100_tx_frame %d, %d, %d\n", + TCBS_AVAIL(bdp->tcb_pool), + bdp->non_tx_command_state, + E100_NON_TX_IDLE); notify_stop = true; rc = 1; goto exit1;